<?php
include_once "clases/negocio/clase.Foro.php";

class ForoDAO extends AbstractDAO
{
	function getEntity()
	{
		return new Foro();
	}

	function findByFilters($id_usuario, $filters)
	{
		$sql = "SELECT f.id, f.titulo, f.descripcion, f.fecha_creacion, f.id_creador, g.nombre as nombre_grupo, ";
		$sql.= "(SELECT count(*) FROM post p WHERE p.id_foro = f.id) as cantidad_posts, ";
		$sql.= "(SELECT usuario from usuario where id = f.id_creador) as creador ";
		$sql.= "FROM foro f ";
		$sql.= "INNER JOIN usuario u ON u.id = f.id_creador ";
		$sql.= "LEFT JOIN grupo g ON g.id = f.id_grupo ";
		$sql.= "WHERE (g.id IS NULL OR g.id IN (SELECT id_grupo FROM miembro_grupo WHERE id_usuario=".$id_usuario.")) ";

		if (isset($filters["titulo"]))
			$sql.= "AND f.titulo LIKE '%". $filters["titulo"] . "%' ";
		if (isset($filters["descripcion"]))
			$sql.= "AND f.descripcion LIKE '%". $filters["descripcion"] . "%' ";
	  $sql.= "ORDER BY IFNULL((SELECT fecha FROM post where id_foro = f.id and id_usuario = ".$id_usuario." order by fecha desc limit 1),'0') desc";
		$rs = $this->getEntity()->_db->leer($sql);
		return $this->_rs2Collection($rs);
	}

	function findPosts($id_foro)
	{
		$sql = "SELECT p.*, u.usuario, pp.imagen FROM post p ";
		$sql.= "INNER JOIN usuario u on u.id = p.id_usuario ";
		$sql.= "INNER JOIN perfil pp on pp.id = u.id ";
		$sql.= "where p.id_foro = ".$id_foro;
		$sql.= " order by p.fecha desc";
		$rs = $this->getEntity()->_db->leer($sql);
		return $this->_rs2Collection($rs);
	}

	function getPostsDespuesDe($timestamp) {
		$id_usuario=RegistryHelper::getIdUsuario();
		$sql.="SELECT u.id as id_usuario,f.id as id_foro, u.nombre as nombre_usuario, apellido, f.titulo, fecha
			FROM post p inner join foro f ON p.id_foro=f.id INNER JOIN usuario u on p.id_usuario=u.id
			WHERE id_foro IN
			(SELECT id_foro FROM post p2 WHERE p2.id_usuario=$id_usuario)
			AND fecha>= '$timestamp'
			AND p.id_usuario<>$id_usuario";

		return $rs = $this->getEntity()->_db->leer($sql);
	}

	function findMyForos($id_usuario)
	{
		$sql = "SELECT id, titulo, nombre_grupo, descripcion, posts FROM ";
		$sql.= "(SELECT f.id, f.titulo, g.nombre as nombre_grupo, f.descripcion, ";
		$sql.= "IFNULL((SELECT fecha FROM post where id_foro = f.id and id_usuario = ".$id_usuario." order by fecha desc limit 1),'0') as last_post, ";
		$sql.= "(SELECT count(*) from post where id_foro = f.id) as posts	 ";
		$sql.= "FROM foro f ";
		$sql.= "INNER JOIN grupo g ON g.id = f.id_grupo ";
		$sql.= "WHERE (g.id IN (SELECT id_grupo FROM miembro_grupo WHERE id_usuario=".$id_usuario.")) ";
		$sql.= "UNION ALL ";
		$sql.= "SELECT f.id, f.titulo, 'Publico' as nombre_grupo, f.descripcion, ";
		$sql.= "IFNULL((SELECT fecha FROM post where id_foro = f.id and id_usuario = ".$id_usuario." order by fecha desc limit 1),'0') as last_post, ";
		$sql.= " (SELECT count(*) from post where id_foro = f.id) as posts ";
		$sql.= "FROM foro f ";
		$sql.= "WHERE (f.id_grupo is NULL OR f.id_grupo = 0) ";
		$sql.= "AND ".$id_usuario." IN (SELECT id_usuario FROM post where id_foro = f.id) ) t ";
		$sql.= "ORDER BY last_post desc";
		$rs = $this->getEntity()->_db->leer($sql);
		return $this->_rs2Collection($rs);

	}
}
?>